package cn.yunyichina.openapi.proxy.utils;

import java.util.HashMap;
import java.util.Map;
import cn.yunyichina.openapi.proxy.entity.Response;
import cn.yunyichina.utils.security.Base64Method;
import com.alibaba.dubbo.rpc.service.GenericService;
import com.alibaba.fastjson.JSON;

/**
 * 
 *     
 * 项目名称：yyt-openapi-notify
 * 类名称：AuthorizeUtil    
 * 类描述：    
 * 创建人：zhangkewen    
 * 创建时间：2016年9月24日 上午9:47:04    
 * 修改人：zhangkewen    
 * 修改时间：2016年9月24日 上午9:47:04    
 * 修改备注：    
 * @version     
 *
 */
public class AuthorizeUtil {

	/**
	    * 验证签名
	    * @param httpParams
	    * @return
	     * @throws Exception 
	    */
	   public static Response validate(Map<String,String> httpParams) throws Exception{
	       
	       Response response=new Response();
	       
	       try{
	    	   String serviceDefine="IAuthorize";
	           if (!ServiceUtil.getDicServices().containsKey(serviceDefine)) {
		           	//重新加载
		           	ServiceUtil.reLoad(serviceDefine);
		   	        if (!ServiceUtil.getDicServices().containsKey(serviceDefine)){
		   	        	response = new Response("10", "没有该IAuthorize的服务，请注册到数据库");
		   	            return response;
		           	}
	           }
	           
	           GenericService service = (GenericService)ServiceUtil.getDicServices().get(serviceDefine).getService();
	           String jsonData=JSON.toJSONString(httpParams);
	           
	           Map<String,String> postParams=new HashMap<String,String>();
	           postParams.put("data", Base64Method.encryptUrlSafeBase64(jsonData));
	           postParams.put("method", "yyt.authorize.signature.validate");
	           postParams.put("sessionid", httpParams.containsKey("sessionid")?httpParams.get("sessionid"):"");
	           Object resObj=service.$invoke("callFromExternal", new String[] { "java.util.Map" }, new Object[]{postParams});
	           response=JSON.parseObject(JSON.toJSONString(resObj),Response.class);
	       }catch(Exception ex){
	    	   response=new Response("10", "调用Authorize授权服务异常:"+ex.getMessage());
	       }
	      
	       return response;
	   }
}
